package org.streets.workflow.engine.task;

import org.streets.workflow.engine.ITaskInstance;
import org.streets.workflow.engine.WorkflowEngine;
import org.streets.workflow.engine.WorkflowException;


/**
 * 任务分配处理程序，工作流系统将真正的任务分配工作交给该处理程序完成。<br>
 * 所有的FORM类型的Task都需要设置其Performer属性，Performer属性实际上是一个Participant对象，
 * 由该对象提供IAssignmentHandler实现类。
 * 
 */
public interface ITaskAssignor {
    /**
     * 实现任务分配工作，该方法一般的实现逻辑是：<br>
     * 首先根据performerName查询出所有的操作员，可以把performerName当作角色名称。
     * 然后调用asignable.asignToActor(String actorId,boolean needSign)或者
     * asignable.asignToActor(String actorId)或者asignable.asignToActorS(List actorIds)
     * 进行任务分配。
     * @param asignable IAssignable实现类，在FireWorkflow中实际上就是TaskInstance对象。
     * @param performerName 角色名称
     * @throws org.WorkflowException.engine.EngineException
     * @throws org.fireflow.kenel.KenelException
     */
    public void assign(WorkflowEngine engine, ITaskInstance asignable, String performerName) throws WorkflowException;
}
